# 导入Document和VectorStoreIndex类，用于文档对象和向量索引
from llama_index.core import Document, VectorStoreIndex

# 导入SentenceSplitter类，用于将文档按句子分割为节点
from llama_index.core.node_parser import SentenceSplitter

# 创建一个包含三篇示例文档的列表，每篇文档都带有元数据
documents = [
    Document(
        # 文档正文内容，介绍人工智能
        text="人工智能（AI）是计算机科学的一个分支，致力于创建能够执行通常需要人类智能的任务的系统。",
        # 文档元数据，包含主题和难度
        metadata={"topic": "AI基础", "difficulty": "初级"},
    ),
    Document(
        # 文档正文内容，介绍机器学习
        text="机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。机器学习是人工智能的一个子领域，它使计算机能够在没有明确编程的情况下学习和改进。",
        # 文档元数据，包含主题和难度
        metadata={"topic": "机器学习", "difficulty": "中级"},
    ),
    Document(
        # 文档正文内容，介绍深度学习
        text="深度学习是机器学习的一个分支，使用多层神经网络来模拟人脑的学习过程。",
        # 文档元数据，包含主题和难度
        metadata={"topic": "深度学习", "difficulty": "高级"},
    ),
]

# 打印演示标题
print("🔍 文档检索优化演示:")
# 打印分隔线
print("=" * 50)

# 方法1：直接用文档对象创建向量索引
print("方法1: 直接使用文档")
# 从文档列表创建向量索引
index1 = VectorStoreIndex.from_documents(documents)
# 获取查询引擎
query_engine1 = index1.as_query_engine()
# 对索引进行查询，问题为“什么是机器学习？”
response1 = query_engine1.query("什么是机器学习？")
# 打印查询结果
print(f"回答: {response1}")
# 打印空行分隔
print()

# 方法2：先将文档分割成节点，再创建向量索引
print("方法2: 先分割成节点")
# 创建句子分割器，设置分块大小为50，重叠为5
splitter = SentenceSplitter(chunk_size=50, chunk_overlap=5)
# 使用分割器将文档分割为节点
nodes = splitter.get_nodes_from_documents(documents)
# 用分割后的节点创建向量索引
index2 = VectorStoreIndex(nodes)
# 获取查询引擎
query_engine2 = index2.as_query_engine()
# 对索引进行查询，问题为“什么是机器学习？”
response2 = query_engine2.query("什么是机器学习？")
# 打印查询结果
print(f"回答: {response2}")
